Computers and computing systems have affected nearly every aspect of modern living. Computers are generally involved in work, recreation, healthcare, transportation, entertainment, household management, etc. Computer functionality is typically the result of computing systems executing software code.
A substantial portion of modern software code is dedicated to discovering, reporting, and recovering from error conditions. In real-world scenarios, error conditions are relatively rare and are often difficult to simulate, yet programmers devote a substantial amount of resources to dealing with them.
Within software systems, a disproportionate number of bugs exist in error recovery code as compared to the total code in these systems. This directly correlates to the fact error conditions are often difficult to simulate and as a result often go untested until a customer encounters the underlying issue in the field. Improper error recovery logic can lead to compound errors and ultimately to crashes and data corruption.
Traditional software systems comingle different types of error conditions and provide a single mechanism for dealing with these error conditions. This uniformity is appealing on the surface as it allows developers to reason about error conditions in a single consistent way for the system. Unfortunately, this uniformity obfuscates qualitative differences in errors.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.